#!/usr/bin/env python3
"""
本地LM模型快速配置脚本
"""

import json
import os
import sys
import requests
from pathlib import Path

def check_lm_studio():
    """检查LM Studio是否运行"""
    try:
        response = requests.get("http://localhost:1234/v1/models", timeout=5)
        if response.status_code == 200:
            models = response.json()
            print("✅ LM Studio服务正在运行")
            print(f"   可用模型: {[model['id'] for model in models.get('data', [])]}")
            return True
        else:
            print("❌ LM Studio服务响应异常")
            return False
    except:
        print("❌ LM Studio服务未运行")
        return False

def configure_local_model():
    """配置本地模型"""
    print("🔧 配置本地LM模型...")
    
    # 检查LM Studio
    if not check_lm_studio():
        print("\n📋 LM Studio设置指南:")
        print("1. 下载并安装LM Studio: https://lmstudio.ai/")
        print("2. 启动LM Studio")
        print("3. 下载模型 (如: google/gemma-3-4b)")
        print("4. 启动本地服务器 (端口1234)")
        print("5. 重新运行此脚本")
        return False
    
    # 配置AI配置文件
    config = {
        "current_model": "local",
        "models": {
            "local": {
                "name": "本地LM Studio",
                "provider": "local",
                "api_key": "",
                "model": "google/gemma-3-4b",
                "max_tokens": -1,
                "temperature": 0.7,
                "base_url": "http://localhost:1234"
            }
        },
        "system_prompt": "你是一个专业的日志分析专家，专门帮助用户分析系统日志中的问题。\n\n你的职责包括：\n1. 分析日志中的错误、警告和异常信息\n2. 识别问题的根本原因\n3. 提供具体的解决方案和建议\n4. 回答用户关于日志分析的问题\n5. 帮助用户理解复杂的日志信息\n\n分析原则：\n- 优先关注ERROR和WARN级别的日志\n- 寻找错误之间的关联性\n- 考虑时间序列和组件依赖关系\n- 提供可操作的解决方案\n- 用通俗易懂的语言解释技术问题\n\n请用中文回答用户的问题。",
        "analysis_prompts": {
            "initial_analysis": "请分析以下日志数据，识别主要问题：\n\n日志统计信息：\n{stats}\n\n错误分类：\n{error_categories}\n\n重复日志：\n{duplicates}\n\n请提供：\n1. 主要问题概述\n2. 问题优先级排序\n3. 建议的解决方案\n4. 需要进一步调查的方面",
            "error_analysis": "分析以下错误日志：\n\n错误类型：{error_type}\n错误数量：{error_count}\n错误示例：\n{error_examples}\n\n请分析：\n1. 错误的具体原因\n2. 影响范围\n3. 解决方案\n4. 预防措施",
            "component_analysis": "分析以下组件日志：\n\n组件：{component}\n日志数量：{log_count}\n日志级别分布：{level_distribution}\n\n请分析：\n1. 组件运行状态\n2. 潜在问题\n3. 性能指标\n4. 优化建议"
        }
    }
    
    # 保存默认配置（不包含敏感信息）
    config_dir = Path("config")
    config_dir.mkdir(exist_ok=True)
    
    config_file = config_dir / "ai_config.json"
    with open(config_file, 'w', encoding='utf-8') as f:
        json.dump(config, f, ensure_ascii=False, indent=2)
    
    print("✅ 默认配置已保存")
    print(f"   配置文件: {config_file}")
    
    # 保存运行时配置（包含敏感信息）
    temp_dir = Path("temp")
    temp_dir.mkdir(exist_ok=True)
    
    temp_config_file = temp_dir / "ai_config_runtime.json"
    with open(temp_config_file, 'w', encoding='utf-8') as f:
        json.dump(config, f, ensure_ascii=False, indent=2)
    
    print("✅ 运行时配置已保存")
    print(f"   临时文件: {temp_config_file}")
    print("   (该文件已被 .gitignore 忽略)")
    
    return True

def test_configuration():
    """测试配置"""
    print("🧪 测试配置...")
    
    try:
        # 测试模型连接
        response = requests.post(
            "http://localhost:1234/v1/chat/completions",
            headers={"Content-Type": "application/json"},
            json={
                "model": "google/gemma-3-4b",
                "messages": [
                    {"role": "system", "content": "你是一个日志分析专家，请用中文回答。"},
                    {"role": "user", "content": "请简单介绍一下日志分析的重要性。"}
                ],
                "temperature": 0.7,
                "max_tokens": -1,
                "stream": False
            },
            timeout=30
        )
        
        if response.status_code == 200:
            result = response.json()
            answer = result['choices'][0]['message']['content']
            print("✅ 本地模型测试成功")
            print(f"   测试回答: {answer[:100]}...")
            return True
        else:
            print(f"❌ 本地模型测试失败: {response.status_code}")
            return False
    except Exception as e:
        print(f"❌ 本地模型测试失败: {e}")
        return False

def main():
    """主函数"""
    print("🤖 本地LM模型配置工具")
    print("=" * 50)
    
    # 配置本地模型
    if not configure_local_model():
        sys.exit(1)
    
    # 测试配置
    if not test_configuration():
        print("\n❌ 配置测试失败")
        sys.exit(1)
    
    print("\n" + "=" * 50)
    print("🎉 本地LM模型配置完成!")
    print("\n✅ 配置成功")
    print("   现在可以启动AI日志分析系统")
    print("   运行: python start_ai_system.py")
    print("\n📝 配置说明:")
    print("   - 默认配置保存在 config/ai_config.json")
    print("   - 运行时配置保存在 temp/ai_config_runtime.json")
    print("   - 敏感信息不会被提交到Git")

if __name__ == "__main__":
    main() 